package com.chinasoft;

import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class ButtonMenu {

    public class ReplayButtonAdapter extends MouseAdapter {
        GamePanel game;

        public ReplayButtonAdapter(GamePanel game) {
            this.game = game;
        }

        public void mouseClicked(MouseEvent e) {

            int level = game.getData().getLevel();
            game.initLevel(level);
            game.requestFocusWindow();
        }
    }

    public class StartButtonAdapter extends MouseAdapter {
        JFrame start_frame;

        public StartButtonAdapter(JFrame start_frame) {
            this.start_frame = start_frame;
        }

        /**
         * 处理鼠标点击事件的方法
         * 当检测到鼠标点击时，此方法会执行以下操作：
         * 1. 打印出"点击了开始游戏"，作为日志记录
         * 2. 创建一个新的游戏界面实例（PlayView）并使其可见，以便用户可以开始游戏
         * 3. 隐藏并销毁开始游戏的界面（start_frame），为用户让路到游戏界面做准备
         *
         * @param e MouseEvent对象，包含有关鼠标事件的信息
         */
        public void mouseClicked(MouseEvent e) {
            System.out.println("点击了开始游戏");
            PlayView playview = new PlayView();
            playview.setVisible(true);
            start_frame.setVisible(false);
            start_frame.dispose();
        }

    }

    public class NEXTButtonAdapter extends MouseAdapter {
        private GamePanel bgPanel;

        public NEXTButtonAdapter(GamePanel bgPanel) {
            this.bgPanel = bgPanel;
        }

        /**
         * 处理鼠标点击事件的方法
         * 当用户点击鼠标时，该方法会被调用
         * 它的主要作用是尝试进入游戏的下一关
         *
         * @param e MouseEvent对象，包含鼠标事件的相关信息
         */
        public void mouseClicked(MouseEvent e) {
            // 输出调试信息，表明用户希望进入下一关
            System.out.println("点击了下一关");

            // 调用bgPanel的nextLevel方法尝试进入下一关
            boolean next = bgPanel.nextLevel();

            // 如果nextLevel方法返回false，说明当前已经是最后一关
            if (next == false) {
                // 弹出对话框告知用户已经到达最后一关
                JOptionPane.showMessageDialog(bgPanel, "已经到了 最后一关了 ！");
            }

            // 请求焦点，以便接收后续的输入事件
            bgPanel.requestFocusWindow();
        }

    }

    public class ExitButtonAdapter extends MouseAdapter {
        public void mouseClicked(MouseEvent e) {
            System.out.println("点击了退出游戏");
            System.exit(0);
        }
    }

    public class PrevButtonAdapter extends MouseAdapter {
        private GamePanel game;

        public PrevButtonAdapter(GamePanel game) {
            this.game = game;
        }

        /**
         * 处理鼠标点击事件的方法
         * 当用户点击鼠标时，该方法会被调用
         * 它的主要作用是尝试进入游戏的上一关
         *
         * @param e MouseEvent对象，包含鼠标事件的相关信息
         */
        public void mouseClicked(MouseEvent e) {
            int level = game.getData().getLevel();
            if (level > 1) {
                level--;
                game.initLevel(level);
            } else {
                JOptionPane.showMessageDialog(game, "已经到了  第一关了  ！");
            }
            game.requestFocusWindow();
        }
    }

    public class LastButtonAdapter extends MouseAdapter {
        private GamePanel game;

        public LastButtonAdapter(GamePanel game) {
            this.game = game;
        }

        /**
         * 处理鼠标点击事件的方法
         * 当用户点击鼠标时，该方法会被调用
         * 它的主要作用是尝试进入游戏的上一关
         *
         * @param e MouseEvent对象，包含鼠标事件的相关信息
         */
        public void mouseClicked(MouseEvent e) {
            int level = game.getData().getLevel();
            if (level < MapData.MAX_LEVEL) {
                game.initLevel(MapData.MAX_LEVEL);
            }
            game.requestFocusWindow();
        }
    }
}
